صفحه ها
دسته
وبلاگ من در بلاگفا
عکس من
وبلاگهاي دوستان
ورودي هاي پنجره اميد
معرفي وب سايت هاي پرطرفدار
سايتهاي دوستان
لينك هاي دسترسي سريع
مطالب من در ثبت مطالب روزانه
آرشیو
آمار وبلاگ
تعداد بازدید : 573395
تعداد نوشته ها : 1492
تعداد نظرات : 394
Rss
طراح قالب
مهدي يوسفي
های ویندوز و چگونگی استفاده از آنها API امروز قصد دارم در مورد

در ویژوال بیسیک بطور خلاصه توضیح دهم و همچنین دو مثال

پراستفاده را نیز در این زمینه بیان کنم که عبارتند از چگونگی پخش

و ساخت یک تایمر با دقت بالا : Wav فایلهای

Application مخفف API واژه : Windows API 1 - آشنایی با

های ویندوز مجموعه ای API . می باشد Programming Interface

از توابع از پیش آماده موجود در سیستم عامل هستند که شما می توانید

آنها را در برنامه های خود فراخوانی کنید
. این توابع در چندین کتابخانه

ویندوز ذخیره شده اند . برای دسترسی به این توابع در ویژوال DLL

کنید . برای مثال : declare بیسیک ابتدا باید آنها را برنامه خود

Declare Function sndPlaySound Lib "winmm.dll" Alias

sndPlaySoundA" (ByVal lpszSoundName As String, "

Long ByVal uFlags As Long) As

sndPlaySound
از تابع Declare همانطور که می بینید مثال فوق یک

موجود است . کلمه Winmm.dll می باشد که این تابع در کتابخانه

دارد . سایر بخشها dll نشان می دهد که این تابع نام دیگری در Alias

مربوط به تعریف پارامترهای تابع می باشند که در مورد مثال فوق ، این

دارد . Long تابع دو پارامتر ورودی و یک خروجی از نوع

در برنامه می توانید از آن استفاده نمائید . API کردن Delare پس از

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٢٨

استفاده Wav تابعی که برای پخش فایلهای : Wav 2 - پخش فایلهای

است که در بالا با آن آشنا شدید . sndPlaySound می شود تابع

uFlags و پارامتر Wav نام و مسیر فایل lpzSoundName پارامتر

چگونگی پخش فایل را مشخص می کند . مقادیر ممکن این پارامتر

عبارتند از :

پخش شود که آنرا Wav اجازه می دهد طوری فایل : SND_ASYNC -

تان را هر Wav بتوان وقفه داد . بعبارت دیگر قادر خواهید بود فایل

زمان که بخواهید پخش کنید و مطمئن باشید که حتما شنیده می شود .

را بطور ممتد پخش می کند . Wav فایل : SND_LOOP -

پیدا نشود صدای دیگری Wav اگر فایل : SND_NODEFAULT -

ویندوز ) default پخش نخواهد شد ( مثلا برخی صداهای

کنترل به برنامه داده نمی Wav در طول پخش فایل : SND_SYNC -

ای را در پس زمینه Wav شود . این پارامتر در زمانیکه می خواهید فایل

برنامه تان پخش کنید مناسب نمی باشد .

ای قبلا در حال پخش باشد ، فایل Wav اگر فایل : SND_NOSTOP -

شما آنرا دچار وقفه نمی کند . از این پارامتر زمانی استفاده می Wav

مان هیچوقت در وسط کار قطع نشود . Wav شود که بخواهیم فایل

Or اگر بخواهید از بیش از یکی از این پارامترها استفاده کنید توسط

آنها را ترکیب نمائید مثال :

or ding.wav", SND_ASYNC\" & sndPlaySound App.path

SND_LOOP

نکته : برای استفاده از توابع صوتی پیچیده تر بایستی از

می باشد استفاده کنید . در DirectX که یکی از اجزای DirectSound

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٢٩

بعدا صحبت خواهم کرد . DirectSound مورد

3 - ساخت یک تایمر با دقت بالا : شاید تا بحال از کنترل تایمر موجود در

نوار ابزار ویژوال بیسیک استفاده کرده باشید . این تایمر دارای دقتحدود

55 میلی ثانیه است . برای دستیابی به زمانهای با دقت بالاتر این

کنترل مفید نخواهد بود .

Kernel32.dll موجود در کتابخانه API یک GetTickCount تابع

است . این تابع طول زمانی را که سیستم شروع به کار کرده است رابرحسب میلی ثانیه برمی گرداند

:

() "Private Declare Function GetTickCount Lib "kernel32

As Long

برای بررسی طی شدن یک مدت زمانی خاص شما ابتدا باید مقدار این

قرار دهید سپس در یک TempTime تابع را در یک متغیر کمکی مثلجدید و زمان

GetTickCount باید اختلاف زمان Do-Loop حلقهرا با مقدار زمانی که می خواهید سپری شود مقایسه کنید : TempTime

TempTime = GetTickCount()x

GetTickCount() - TempTime > Do While DesiredTime

'Do some things

Loop

توسط کد بالا می توان یک عملیات خاص را برای یک مدت زمانی

مشخص اجرا کرد .

کد زیر نشان می دهد که چگونه می توان دستورات خاصی را در فواصل

زمانی خاص اجرار کرد :

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٣٠

ExitFunction = False

GetTickCount()x
= TempTime

Do While not(ExitFunction)x

GetTickCount() - TempTime then > If DesiredTime

'Reset the temporary variable

GetTickCount()x
= TempTime

'Do some things

End If

Loop

برنامه benchmark می توان برای GetTickCount همچنین از تابع

ها استفاده کرد . بعبارت دیگر می توان زمان اجرای یکسری دستورات

خاص را بدست آورد .


جمعه بیست و پنجم 11 1387
X